import com.sun.corba.se.spi.activation.ServerHeldDownHelper;

import javax.swing.*;
import java.util.Scanner; // Java 中的包，类似C语言中的头文件
import java.util.Random; // 生成随机数值
import java.util.concurrent.ForkJoinPool;

public class Study11 {
    /* 打印三角形*/
    public static void main (String[] args) {
        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i ; j--) {
                System.out.print(' ');
            }
            for (int j = 1; j <= i; j++) {
                System.out.print('*');
            }
            for (int j = 1; j < i; j++) {
                System.out.print('*');

            }
            System.out.println();


        }
    }



    /*分别计算0 到 100 之间的奇数和偶数的和*/
    public static void main28 (String[] args) {
        int oddSum = 0;
        int evenSum = 0;
        for (int i = 0; i <= 100; i++) {
            if(i % 2 == 0) {
                evenSum += i;
            } else {
                oddSum += i;
            }
        }
        System.out.println("奇数的和："+oddSum);
        System.out.println("偶数的和："+evenSum);
    }



    /* while  以及 do...while()的区别不同*/
    public static void main27 (String[] args) {
        int i = 0 ;
        while(i < 0) {
            System.out.println(i);
            i++;
        }
        System.out.println("=======================");

        do {
            System.out.println(i);
            i++;
        }while( i < 0 );

    }



    /*switch 中的字符串的探究*/
    public static void main26 (String[] args) {
        String str = "彩虹海";

        switch(str) {
            case "彩虹" :
                System.out.println("彩虹");
                break;
            case "海" :
                System.out.println("海");
                break;
            case "彩虹海" :
                System.out.println("彩虹海");
                break;
            default :
                System.out.println("弄啥子勒");
                break;
        }

    }



    /* switch 中字符的探究*/
    public static void main25 (String[] args) {
        char grade = 'F';
        switch(grade) {
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("及格");
                break;
            case 'D':
                System.out.println("再接再厉");
                break;
            case 'E':
                System.out.println("挂科");
                break;
            default:
                System.out.println("未知等级 SSSSSS");
                break;
        }

    }




    /*运用 &与操作符，以及 >> 移位操作符 求一个二进制中有多少了 1 */
    public static void main24 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断是否有输入操作
        int num = scan.nextInt(); // 从键盘中读取 Int 类型的数值
        int count = 0;

        for (int i = 0; i < 32; i++) {
            if( ((num >> i) & 1) == 1) {
                count++;
            }
        }
        System.out.println(count++);

        scan.close(); // 关闭IO流,编程好习惯；

    }



    /* 读入密码，密码都是字符串的，因为 A,a,*...*/
    public static void main23 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断是否有输入操作
        int count = 3;

        while(count != 0) {
            System.out.print("请输入密码: ");
            String str = scan.nextLine(); // 可以读取空格 ，next() 不可以读取空格

            if(str.equals ("123456") ) {
                System.out.println("密码正确，登入成功");
                break;
            } else {
                count--;
                System.out.println("密码错误"+ "你还有"+count + "次机会");
            }
        }
        scan.close();
    }



    /*水仙花*/
    public static void main22 (String[] args) {
        for (int i = 0; i < 999999; i++) {
            int count = 0;
            int tmp = i;

            // 求位数
            while(tmp != 0) {
                count++;
                tmp = tmp / 10;
            }
            tmp = i;
            int sum = 0;
            while(tmp != 0) {
                sum += Math.pow(tmp %10,count);
                tmp = tmp /10;
            }

            if(sum == i) {
                System.out.println(sum +" is my result");
            }

        }
    }


    /* 求一个数二进制中有多少个 1 */
    public static void main21 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断键盘是否有输入操作
        int n = scan.nextInt();
        int count = 0;
        while( n!=0 ) {
            if(n % 2 == 1) {
                count++;
            }
            n =n / 2; // 右移一位
        }
        System.out.println(count);

        scan.close(); // 关闭IO流；
    }



    /* 计算 1~ 100 中有多少个 9 ，其中注意：99 是有两个的*/
    public static void main20 (String[] args) {
        int count = 0;
        for (int i = 0; i <100 ; i++) {
            if(i / 10 == 9) {
                count++;
            }
            if(i % 10 == 9) {
                count++;
            }

        }
        System.out.println(count++);
    }


    /*第二种方法*/
    public static void main19 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断键盘是否有输入操作
        int n = scan.nextInt(); // 从键盘中读取 Int类型的数值
        double sum = 0.0;
        int flag = 1;

        for (int i = 1; i <n ; i++) {
            if(i % 2 == 0 ) {
                flag = -1;
            }
            sum +=1.0/i*flag;
            flag = 1;
        }
        System.out.println("其最大公约数是："+sum);

        scan.close();
    }




    /* 求 1/1+(-1/2)+1/3 0.698172179310195*/

    public static void main18 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断键盘是否有输入操作
        int n = scan.nextInt(); // 从键盘中读取Int类型的数值
        double sum = 0;
        int flag = 1;
        for (int i = 1; i <n ; i++) {
            sum += (double)1/i*flag;
            flag = -flag;
        }
        System.out.println("最后的结果为："+sum);


        scan.close(); // 关闭IO流，编程好习惯
    }



    /* 求最大公约数，辗转相除法*/
    public static void main17 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断键盘中是否有输入操作
        int num1 = scan.nextInt(); // 从键盘中读取Int 类型的数值
        int num2 = scan.nextInt();
        int save = 0;
        int flag = 0;
        int max = 0;
        int min = 0;

        while((num1 % num2 != 0)) {
            save = num1 % num2;
            num2 = num1;
            num1 = save;
            flag = 1;
        }

        if(flag == 0) {
            max = num1 > num2 ? num1 : num2 ;
            min = num1 < num2 ? num1 : num2 ;
            save = max / min;

        }


        System.out.println("它们的最大公约数是= "+save);
        scan.close(); // 关闭IO流，编程的好习惯；
    }




    /*九九乘法表*/
    public static void main16 (String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j < i; j++) {
                System.out.print(j +"*"+i+"="+(i*j)+"\t");
            }
            System.out.println();
        }
    }




    /* 一个年龄的判断*/
    public static void main15 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断键盘是否有数据输入
        int age = scan.nextInt(); // 读取键盘中Int类型的数值
        if (age < 18) {
            System.out.println("青少年");
        } else if (18 <= age && age < 20) {
            System.out.println("青年");
        } else if(20 <= age && age <30) {
            System.out.println("中青年");
        } else if (20 <= age && age < 40) {
            System.out.println("壮年");
        }

        scan.close(); // 关闭IO 流，编程好习惯
    }





    /* 在100 以内一个猜数字的游戏的实现*/
    public static void main14 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断键盘中是否有数值的输入
        Random random = new Random(); // 创建一个随机的数
         int randNum2 = random.nextInt(100); // {0 ~ 100};
         int randNum = random.nextInt(100)+100; // 产生一个{0 ~ 200 }的数值大小的值
        while(true) {
            System.out.print("请输入你所猜测的数值:");
            int num = scan.nextInt();

            if(num == randNum) {
                System.out.println("恭喜你，猜对了");
                break;
            } else if(num > randNum) {
                System.out.println("不好意思，你猜大了，请重新猜测");
            } else if(num < randNum) {
                System.out.println("不好意思，你猜小了，请重新猜测");
            }
        }

        scan.close(); // 关闭IO流
    }





    /* 我们可以输入多个数字，并求其总和和平均值，每输入一个数值，用回车
    * 键结束，通过输入非数字来结束输入并输出执行结果*/
    public static void main13 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断是否有键盘的输入操作
        int count = 0;
        double sum = 0;

        while(scan.hasNextDouble()) { // 判断条件为 键盘输入的 double 类型值
            double num = scan.nextDouble(); // 接受键盘中 double 类型的数值
            sum += num;
            count++;
        }
        System.out.println(count +"数的总和为："+sum);
        System.out.println(count +"数的平均值为："+(sum/count++));

        scan.close(); // 关闭IO流，变成好习惯
    }



    /* 对Scanner方法的探究*/
    public static void main12 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，判断是否有键盘的输入操作
        int i = 0;
        float f = 0.0F;// F 用于区别小数默认double 类型
        System.out.println("请输入整数");

        if(scan.hasNextInt()) { // 判断键盘中输入的是否为 Int类型值
            i = scan.nextInt(); // 读取键盘中Int 类型的值
            System.out.println(i);
        } else {
            System.out.println("输入的不是Int类型的值");
            String blank = scan.next();
        }


        System.out.println("请输入浮点数值");
        if(scan.hasNextFloat()) { // 判断键盘中输入的是否为 float 类型的值
            f = scan.nextFloat(); // 读取键盘中 float 类型的数值
            System.out.println(f);
        } else {
            System.out.println("你输入的数值不是 float 的类型值");
        }

        scan.close(); // 关闭IO流编程好习惯
    }



    /* 使用 for 语句计算 1!+2!+3!*/
    public static void main11 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，接受键盘中的数据
        if(scan.hasNextInt()) {
            int num = scan.nextInt();
            int sum = 0;
            for (int i = 1; i <=num ; i++) {
                int ret = 1;
                for (int j = 1; j <=i ; j++) {
                    ret*=j;

                }
                sum +=ret;

            }
            System.out.println("其结果为："+sum);
        }
        scan.close(); // 关闭IO流
    }



    /*for 的无休止循环*/
    // 注意：for 语句中没有第二个表达式(判断表达式时为无休止的循环)
    public static void main10 (String[] args) {
        int i = 0;
      /*  for (; ; ) {
            if (i <= 10) {
                System.out.println(i);
                i++;
            }*/
        for(i= 0; ; i++) {
            if (i <= 10) {
                System.out.println(i);
                i++;
            }
            System.out.println("无休止的循环");
        }

    }



    /*对 for 的探究*/
    public static void main9 (String[] args) {
        int i = 0;
        for( ; i<10;i++) { // 注意这里是同样可以的因为 i 在for 循环语句当中只需要执行一次，就可以了的
            System.out.println(i);
        }

    }



    /* 对 continue 的探究*/
    public static void main8 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，用于接受键盘中的数据
        if(scan.hasNextInt()) { // 判断键盘中输入的数据是否是Int类型值
            int num = scan.nextInt(); // 键盘中读取一个Int 类型值
            while(num <= 20) {
                if(num %5 == 0) {
                    System.out.println(num);
                    continue; // 应为continue 的存在跳过了下面的 num++ 的语句导致 num 没有++，没有改变
                              // 所以 num 就会一直小于 20 进入无休止的循环当中
                }
                System.out.println("hh");
                num++;
            }
            scan.close(); // 关闭IO 流

        }

    }



    public static void main7 (String[] args) {
        int num = 10;
        if(num == 10) {
            System.out.println("输入错误");
//            break;
        }
    }



    /* 从 X ~ 200 中找出一个可以被 5 和 3 整除的数值 */
    public static void main6 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，用于接受键盘中的数据
        if(scan.hasNextInt()) { // 判断键盘输入的是否是一个Int 类型值
            int num = scan.nextInt(); // 从键盘中接受一个Int 类型的值
            while(num <= 200) {
                /*if(num % 3 == 0 && num % 5 ==0  ) {
                    System.out.println("该数值为:"+num);
                    break;*/
                if(num %(5*3) == 0) {
                    System.out.println("该数值为："+num);
                    break;
                }
                num++;
            }

        }

        scan.close(); // 关闭IO流资源
    }



    public static void main5 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，用于接受键盘中的数据
        System.out.print("请使用nextLine的方式接受数据");
        if(scan.hasNextLine()) {
            String str = scan.nextLine(); // 可以读取字符串中的空格
            System.out.print("你输入的是："+str);
        }

        scan.close(); // 关闭IO流数据
    }



    public static void main4 (String[] args) {
        Scanner scan = new Scanner (System.in); // 创建一个扫描器对象，用于接受键盘发出的数据
        System.out.println("使用next()方式接受数据");
        if(scan.hasNext()) { // 判断用户有没有输入字符串
            String str = scan.next(); // 用于接受字符串，不能得到带有空格的字符串
            System.out.println("你输入的是:"+str);
        }


        scan.close(); // 关闭IO流
    }



    /*计算 5!+4!+3!*/
    public static void main3 (String[] args) {
        Scanner scan = new Scanner (System.in);
        int num = 1;
        int sum = 0;
        int ret = scan.nextInt();
        while(num <= ret) {
            int i = 1;
            int sign = ret;
            int n =1;
            while(i <= num) {
                n*= i;
                i++;
            }
            sum +=n;
            num ++;
        }
        System.out.println("其和值为："+sum);

        scan.close();
    }



    public static void main2 (String[] args) {
        Scanner scan = new Scanner (System.in);
        int num = scan.nextInt();
        int ret = 1; //
        int sum = 0;
        int i = 1;
        while( i <= num) {
            ret*=i;
            sum+=ret; //
            i++;
        }

        System.out.println("其和为 "+sum);

        scan.close(); // 关闭IO流
    }





    /* 对于switch多分支语句的探究*/
    public static void main1 (String[] args) {
        int a = 3;

        switch(a) {
            case 1:
                System.out.println("1");
                break;
            case 2:
                System.out.println("2");
                break;
            case 3:
                System.out.println("3");
                break;
            default :
                System.out.println("请输入正确的数值");
                break;
        }
    }
}
